﻿Public Class LeeggoedVanArtikelForm

    ' TODO: met selection werken ipv currentrow?

    Private _mainForm As Form
    Private _currentArtikelId As Integer

#Region "Constructors"

    Public Sub New(ByVal mainForm As Form)
        Me.InitializeComponent()
        _mainForm = mainForm
    End Sub

    Protected Overrides Sub OnLoad(ByVal e As EventArgs)
        MyBase.OnLoad(e)
        Try
            InitGridArtikels()

            tsbBewaren.Enabled = False
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het inladen van de gegevens")
            log.WriteError("LeeggoedVanArtikelForm_Load" & Environment.NewLine & ex.ToString())
        End Try
    End Sub

#End Region

#Region "Event handling"

    Private Sub tsbSluiten_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbSluiten.Click
        Me.Close()
    End Sub

    Protected Overrides Sub OnKeyUp(ByVal e As KeyEventArgs)
        MyBase.OnKeyUp(e)
        Select Case e.KeyCode
            Case Keys.F12
                Me.Close()
            Case Keys.F2
                If (Not tsbBewaren.Enabled) Then Return
                BewaarWijzigingen()
            Case Keys.F3
                If (Not tsbVerwijderen.Enabled) Then Return
                Verwijderen()
            Case Keys.F4
                CreateNieuw()
        End Select
    End Sub

    Private Sub tsbBewaren_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbBewaren.Click
        BewaarWijzigingen()
    End Sub

    Private Sub GridArtikels_RowsAdded(ByVal sender As Object, ByVal e As DataGridViewRowsAddedEventArgs) Handles GridArtikels.RowsAdded
        ' zorg ervoor dat een nieuw toegevoegde rij de huidige rij wordt
        Me.ArtikelsEnLeeggoedBindingSource.Position = e.RowIndex
        Me.GridArtikels.Rows(e.RowIndex).Selected = True
    End Sub

    Private Sub tsbNieuw_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbNieuw.Click
        CreateNieuw()
    End Sub

    Private Sub tsbVerwijderen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbVerwijderen.Click
        Verwijderen()
    End Sub

    Private Sub GridArtikels_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles GridArtikels.CellValueChanged
        Dim leeggoedKolom As DataGridViewColumn = DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.LeeggoedArtikelIdColumn.ColumnName, GridArtikels)
        If (leeggoedKolom IsNot Nothing AndAlso e.ColumnIndex = leeggoedKolom.Index) Then
            tsbBewaren.Enabled = True
        End If
    End Sub

#End Region

#Region "Helperfuncties"

    Private Sub InitGridArtikels()
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.IdColumn.ColumnName, GridArtikels)
            .Visible = False ' Autonumber niet tonen
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.ArtikelIdColumn.ColumnName, GridArtikels)
            .Visible = False
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.OmschrijvingColumn.ColumnName, GridArtikels)
            .Width = 270
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.BarcodeColumn.ColumnName, GridArtikels)
            .Width = 140
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.PrijsColumn.ColumnName, GridArtikels)
            .Width = 70
            .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            .DefaultCellStyle.Format = "c"
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.StatiegeldEuroColumn.ColumnName, GridArtikels)
            .Width = 70
            .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            .DefaultCellStyle.Format = "c"
            .HeaderText = "Statiegeld"
        End With
        With DataGridViewHelper.GetGridColumnByDataName(ArtikelLijstDataSet.LeeggoedVanArtikels.LeeggoedArtikelIdColumn.ColumnName, GridArtikels)
            .Width = 300
        End With
        LeeggoedVanArtikelsDal.FillLeeggoedVanArtikels(Me.ArtikelLijstDataSet)
        LeeggoedVanArtikelsDal.FillLeeggoedArtikels(Me.ArtikelLijstDataSet)
    End Sub

    Private Sub CreateNieuw()
        Me.Cursor = Cursors.WaitCursor
        Dim f As New ZoekArtikelForm("", True)
        If (f.ShowDialog() = DialogResult.OK) Then
            Dim newRow As ArtikelLijstDataSet.LeeggoedVanArtikelsRow = Me.ArtikelLijstDataSet.LeeggoedVanArtikels.NewLeeggoedVanArtikelsRow()
            newRow.ArtikelId = f.Artikel.Id
            newRow.Artikelcode = f.Artikel.Artikelcode
            newRow.Barcode = f.Artikel.Barcode
            newRow.Prijs = f.Artikel.Prijs
            newRow.StatiegeldEuro = f.Artikel.StatiegeldEuro
            newRow.Omschrijving = f.Artikel.Omschrijving
            newRow.LeeggoedArtikelId = Me.ArtikelLijstDataSet.Artikels.First.Id
            Me.ArtikelLijstDataSet.LeeggoedVanArtikels.AddLeeggoedVanArtikelsRow(newRow)
            tsbBewaren.Enabled = True
        End If
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub Verwijderen()
        If (GridArtikels.CurrentRow IsNot Nothing) Then
            GridArtikels.Rows.Remove(GridArtikels.CurrentRow)
            _currentArtikelId = GetCurrentArtikelId()
            tsbBewaren.Enabled = True
        End If
    End Sub

    Private Sub BewaarWijzigingen()
        GridArtikels.EndEdit()
        Try
            LeeggoedVanArtikelsDal.UpdateLeeggoedVanArtikels(Me.ArtikelLijstDataSet)
            tsbBewaren.Enabled = False
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het bewaren van de artikels met leeggoed")
            log.WriteError("LeeggoedVanArtikelForm_BewaarWijzigingen" & Environment.NewLine & ex.ToString())
        End Try
    End Sub

    Private Function GetCurrentArtikelId() As Integer
        If (Me.GridArtikels.CurrentRow Is Nothing) Then Return 0
        Dim artikelId As Integer = Convert.ToInt32(DataGridViewHelper.GetValueFromDataGridRow( _
            Me.ArtikelLijstDataSet.LeeggoedVanArtikels.ArtikelIdColumn.ColumnName, Me.GridArtikels.CurrentRow))
        Return artikelId
    End Function

#End Region

End Class